package Server;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;
import java.util.HashMap;

import Controllers.RemotePlayerController;


public class ServicesServerImplemented extends UnicastRemoteObject implements ServicesServer{
	private static final long serialVersionUID = 1L;

	HashMap <String, Service> listServices;

	protected ServicesServerImplemented() throws RemoteException {
		super();
		installServices();
	}

	private void installServices() {
		listServices = new HashMap<String, Service>();
		listServices.put("Player à distance", new RemotePlayerController());
	}

	@Override
	public Object[] getListeServices() throws RemoteException {
		return listServices.keySet().toArray();

	}

	@Override
	public Service getService(Object keyService) throws RemoteException {
		Service service = (Service) listServices.get(keyService);
		return service;
	}

	public static void main (String[] args) {
		/*
		 * les lignes suivantes permettent de lancer le registre rmi
		 * par programme 
		 */
		try {
			LocateRegistry.createRegistry(1099);
			System.out.println("Le RMI registry est pret.");
		} catch (Exception e) {
			System.out.println("Le RMI registry n'a pas démmaré correctement.");
		}
		/*
		 * Il faut enregistrer le service (le lier au registre RMI) : 
		 * c'est en réalité la souche que RMI place dans le registre
		 * puisque c'est d'elle dont les clients ont vraiment besoin.
		 * Donner au service un nom permettra aux clients de le chercher dans le registre
		 * le registre doit déjà s'exécuter sinon cette ligne échoue "Naming.rebind..."
		 * 
		 */
		try {

			Naming.rebind("ServeurServices", new ServicesServerImplemented());
		} catch(Exception ex) { }
		System.out.println("Le service distant s'exécute");
	}
}